Three Haskell Cake
HaskellでApplication Architectureを作るときのパターン
Layered Architecture
ReaderTパターンや、mtlなどのデザパタを取り入れている
Three Layer Haskell Cake
理解不足で理解を保留した箇所もいくつかあるのでまた再読しようmrsekut.icon
Layer1
orchestration layer
Effectをinjdectionする層
ReaderTパターンを使う
この層はtestするのが難しいので薄く作る
EnvとAppM型を定義する
AppMはApplication Monadになる
命令形プログラミング的
Layer2
capabilityを定義する
外部アービスと依存関係をモックアウトする
DDDのRepository層のようなイメージかなmrsekut.icon
mtl styleの型クラスを定義する
できるだけ小さく保つ
OOP的
Layer3
純粋なビジネスロジックを書く
IOやEffectのような純粋でないものは何も含まない
Free Applicative Functor
関数型プログラミング的
#??
AppMを、Layer2で定義される型クラスの、instanceにする部分はどこに含まれる?
Layer1かLayer2
それほど拘りがあるわけではないが、気持ち決めておきたい
たぶんLayer1
このアーキテクチャで実装された例
purescript-halogen-realworld
Three Haskell Cakeの実践としてpurescript-halogen-realworldを読む
Holmusk/three-layer
関連
Capabilityパターン
Functional Core, Imperative Shell
参考
Three Layer Haskell Cake
本家
Push Effects To The Edges
purescript-halogen-realworldの解説記事
The ReaderT Capability Design Pattern - PureScript: Jordan's Reference
Haskell Cakeを元にわかりやすく5つのLayerに分けている
「5つのLayerに分けている」と聞くとちょっとギョッとするけどHaskell Cakeとほぼ同じ話
具体例があるので、どこに何を書けばよいのかわかりやすくなっていると思う
/ilyaletre/Three Layer Haskell Cake